aboutsummaryrefslogtreecommitdiffstats
path: root/apps/mobile/app/dashboard/lists/[slug].tsx
diff options
context:
space:
mode:
Diffstat (limited to 'apps/mobile/app/dashboard/lists/[slug].tsx')
-rw-r--r--apps/mobile/app/dashboard/lists/[slug].tsx135
1 files changed, 0 insertions, 135 deletions
diff --git a/apps/mobile/app/dashboard/lists/[slug].tsx b/apps/mobile/app/dashboard/lists/[slug].tsx
deleted file mode 100644
index e7aab443..00000000
--- a/apps/mobile/app/dashboard/lists/[slug].tsx
+++ /dev/null
@@ -1,135 +0,0 @@
-import { Alert, Platform, View } from "react-native";
-import * as Haptics from "expo-haptics";
-import { router, Stack, useLocalSearchParams } from "expo-router";
-import UpdatingBookmarkList from "@/components/bookmarks/UpdatingBookmarkList";
-import FullPageError from "@/components/FullPageError";
-import CustomSafeAreaView from "@/components/ui/CustomSafeAreaView";
-import FullPageSpinner from "@/components/ui/FullPageSpinner";
-import { api } from "@/lib/trpc";
-import { MenuView } from "@react-native-menu/menu";
-import { Ellipsis } from "lucide-react-native";
-
-import { ZBookmarkList } from "@karakeep/shared/types/lists";
-
-export default function ListView() {
- const { slug } = useLocalSearchParams();
- if (typeof slug !== "string") {
- throw new Error("Unexpected param type");
- }
- const {
- data: list,
- error,
- refetch,
- } = api.lists.get.useQuery({ listId: slug });
-
- return (
- <CustomSafeAreaView>
- <Stack.Screen
- options={{
- headerTitle: list ? `${list.icon} ${list.name}` : "",
- headerBackTitle: "Back",
- headerLargeTitle: true,
- headerRight: () => (
- <ListActionsMenu listId={slug} role={list?.userRole ?? "viewer"} />
- ),
- }}
- />
- {error ? (
- <FullPageError error={error.message} onRetry={() => refetch()} />
- ) : list ? (
- <View>
- <UpdatingBookmarkList
- query={{
- listId: list.id,
- }}
- />
- </View>
- ) : (
- <FullPageSpinner />
- )}
- </CustomSafeAreaView>
- );
-}
-
-function ListActionsMenu({
- listId,
- role,
-}: {
- listId: string;
- role: ZBookmarkList["userRole"];
-}) {
- const { mutate: deleteList } = api.lists.delete.useMutation({
- onSuccess: () => {
- router.replace("/dashboard/lists");
- },
- });
-
- const { mutate: leaveList } = api.lists.leaveList.useMutation({
- onSuccess: () => {
- router.replace("/dashboard/lists");
- },
- });
-
- const handleDelete = () => {
- Alert.alert("Delete List", "Are you sure you want to delete this list?", [
- { text: "Cancel", style: "cancel" },
- {
- text: "Delete",
- onPress: () => {
- deleteList({ listId });
- },
- style: "destructive",
- },
- ]);
- };
-
- const handleLeave = () => {
- Alert.alert("Leave List", "Are you sure you want to leave this list?", [
- { text: "Cancel", style: "cancel" },
- {
- text: "Leave",
- onPress: () => {
- leaveList({ listId });
- },
- style: "destructive",
- },
- ]);
- };
-
- return (
- <MenuView
- actions={[
- {
- id: "delete",
- title: "Delete List",
- attributes: {
- destructive: true,
- hidden: role !== "owner",
- },
- image: Platform.select({
- ios: "trash",
- }),
- },
- {
- id: "leave",
- title: "Leave List",
- attributes: {
- destructive: true,
- hidden: role === "owner",
- },
- },
- ]}
- onPressAction={({ nativeEvent }) => {
- if (nativeEvent.event === "delete") {
- handleDelete();
- }
- if (nativeEvent.event === "leave") {
- handleLeave();
- }
- }}
- shouldOpenOnLongPress={false}
- >
- <Ellipsis onPress={() => Haptics.selectionAsync()} color="gray" />
- </MenuView>
- );
-}